Technical Q&A QA1151
How can I set the default location with the modern Navigation APIs NavCreatexxx?


Q: à»ëOÅANavGetFile() Ç‚ NavPutFile()defaultLocation ǻǫÇåƒÇ—èoǵǃǢÇΩÇΔÇ´Ç…ÇÕÅAdefaultLocation ÉpÉâÉÅÅ[É^ÇégǡǃǢNjǵÇΩÇ™ÅA êVǵǢ NavCreateGetFileDialog() Ç‚ NavCreatePutFileDialog() ǻǫÇà API Ç≈ÇÕÅADZÇÃÉpÉâÉÅÅ[É^ǙǻÇ≠ǻǡǃǢNjÇ∑ÅB åªç›Ç≈ÇÕÇ«ÇÃÇÊǧDžÇ∑ÇÍÇŒÅAÉfÉtÉHÉãÉgÇÃèÍèäÇê›íËÇ≈Ç´ÇÈÇÃÇ≈ǵÇÂǧǩÅH

A: NavDialogRun() ÇåƒÇ—èoǵÇΩå„ÅAÇ≈Ç´ÇÈÇæÇØëÅÇ¢íiäKÇ≈ÅANavCustomControl ÇåƒÇ—èoǵǃ kNavCtlSetLocation ÉÅÉbÉZÅ[ÉWÇìnÇ∑ÇæÇØÇ≈çœÇ›Ç‹Ç∑ÅBàÍî‘ó«Ç¢ï˚ñ@ÇÕÅA Event Proc DžǮǢǃ kNavCBStart ÉZÉåÉNÉ^ÇéÊìæÇµÇΩÇΔǴDžDZÇÃÉRÅ[ÉhÇä‹ÇflÇÈDZÇΔÇ≈Ç∑ÅBéüÇÃÉ\Å[ÉXÉRÅ[ÉhÇ≈ǪÇÃï˚ñ@Çé¶ÇµÇ‹Ç∑ÅB



 pascal void modernEventProc(NavEventCallbackMessage callBackSelector,
                            NavCBRecPtr callBackParms, void* callBackUD)
  {
  ...
  switch(callBackSelector)
    {
    ...
    case kNavCBStart:
      {
      OSStatus theStatus = noErr;
      AEDesc theLocation = {typeNull, NULL);
      FSSpec theFSSpec;
      theStatus = FSMakeFSSpec(...<your construction here>..., &theFSSpec);
      if (theStatus != noErr) {... your error handling here ...}
      theStatus = AECreateDesc(typeFSS, &theFSSpec, sizeof(FSSpec), &theLocation));
      if (theStatus != noErr) {... your error handling here ...}
      theStatus = NavCustomControl(callBackParms->context,
                        kNavCtlSetLocation, (void*)&theLocation);
      if (theStatus != noErr) {... your error handling here ...}
      }
    ...
    }
  ...
  }

ÉäÉXÉg 1Å@ Event Proc Çà kNavCBStart ÉZÉåÉNÉ^Ç≈ÉfÉtÉHÉãÉgÇÃèÍèäÇê›íË




[2002 îN 6 åé 1 ì˙]